{
unsigned short bx;
unsigned short ret;
+ unsigned long flags;
+ __save_flags(flags); __cli();
__asm__("lcall *(%%edi); cld\n\t"
"jc 1f\n\t"
"xor %%ah, %%ah\n"
"d" (vendor),
"S" ((int) index),
"D" (&pci_indirect));
+ __restore_flags(flags);
*bus = (bx >> 8) & 0xff;
*device_fn = bx & 0xff;
return (int) (ret & 0xff00) >> 8;
struct irq_routing_table *rt = NULL;
int ret, map;
unsigned long page;
+ unsigned long flags;
if (!pci_bios_present)
return NULL;
opt.segment = __KERNEL_DS;
DBG("PCI: Fetching IRQ routing table... ");
+ __save_flags(flags); __cli();
__asm__("push %%es\n\t"
"push %%ds\n\t"
"pop %%es\n\t"
"D" (&opt),
"S" (&pci_indirect)
: "memory");
+ __restore_flags(flags);
DBG("OK ret=%d, size=%d, map=%x\n", ret, opt.size, map);
if (ret & 0xff00)
printk(KERN_ERR "PCI: Error %02x when fetching IRQ routing table.\n", (ret >> 8) & 0xff);
int pcibios_set_irq_routing(struct pci_dev *dev, int pin, int irq)
{
int ret;
+ unsigned long flags;
+ __save_flags(flags); __cli();
__asm__("lcall *(%%esi); cld\n\t"
"jc 1f\n\t"
"xor %%ah, %%ah\n"
"b" ((dev->bus->number << 8) | dev->devfn),
"c" ((irq << 8) | (pin + 10)),
"S" (&pci_indirect));
+ __restore_flags(flags);
return !(ret & 0xff00);
}
static unsigned char doublefault_stack[DOUBLEFAULT_STACK_SIZE];
asmlinkage int hypercall(void);
-asmlinkage void lcall7(void);
-asmlinkage void lcall27(void);
/* Master table, and the one used by CPU0. */
struct desc_struct idt_table[256] = { {0, 0}, };